/**
 * 根据路径，获取特定实例
 * @author yangxiao
 * @module util/get-class
 */

import * as path from 'path';

export let _ModuleFunctionCache:any=[];

/**
 * 根据路径，获取指定的模块实例的入口函数,默认入口函数为main()
 * 
 * @export
 * @param {string} _path 模块路径，相对于项目根目录
 * @param {string} dirname 执行文件的路径，一般传入__dirname
 * @param {string} [excName='main'] 实例化后，返回的执行入口函数名
 * @returns any
 */
export function getModuleFunction(_path:string,dirname:string,excName:string='main'){

    if(_ModuleFunctionCache[_path]){
        return _ModuleFunctionCache[_path];
    }
    let cls = getModule(_path,dirname);
    if(cls){
        if(cls[excName]==null){
            console.error("getModuleFunction function not",_path,excName);
            return;
        }
        _ModuleFunctionCache[_path] = cls[excName];
        return cls[excName];
    }
    return null;
}

export function getModule(_path:string,dirname:string){

    _path =dirname + path.normalize("/"+_path) ;
    let clas = require(_path);
    if(clas){
        return clas;
    }else{
        console.error("getModule path  not",_path);
    }
    return null;
}